Logic analyzers and in-circuit emulators have been used for many years by software and hardware developers to help diagnose and debug hardware and software. Such devices may be able to monitor and analyze various circuit and software conditions during debugging and testing of the design. For example, they may store trace information, such as time stamps, register values, data memory content, etc., which may be later analyzed. They may also provide various configurable breakpoints, which allow the designer to analyze the state of the design at a point in its operation by stopping operation when a specified condition occurs. The breakpoints may also be chained together such that a series of conditions happen before the operation is stopped.
For example, conventional logic analyzers and in-circuit-emulators may have a relatively small number of configurable complex breakpoints. A designer may program between one and a few of these breakpoints to cause the analyzing device to perform a specified action upon a condition's occurrence. For example, a first breakpoint might be programmed to look for a write to a certain memory address. When the first breakpoint triggers, it activates a second complex breakpoint, which may look for a certain program counter value. When the program counter reaches that value, a third complex breakpoint is activated, which may watch for a certain stack pointer value. When the stack pointer reaches the specified value, a fourth complex breakpoint is activated, which may watch for a certain accumulator value. Finally, when the accumulator value is reached the operation breaks.
Unfortunately, conventional analyzing devices offer only a few breakpoints, which are implemented as dedicated pieces of hardware, each looking for one condition. Because much of the hardware is dedicated to one function, it is prohibitively expensive to provide a substantial number of breakpoints. Consequently, only a limited number of events can be programmed and only a limited number of conditions can be monitored.
Furthermore, conventionally, separate systems are required to perform both logic analyzer and in-circuit-emulation functions. For example, conventional logic analyzers are able to monitor signals that an in-circuit-emulator would not normally analyze, such as signals that originate outside the circuit containing the emulator. Likewise, a logic analyzer would not normally provide emulation functionality. Consequently, substantial added expensive must be taken to purchase and maintain both systems.
Therefore, it would be advantageous to provide a device that may be used to analyze electronic circuits and software, that is relatively inexpensive, and can track a substantial number of complex conditions occurring during operation of an electronic circuit or software. It would also be advantageous to provide an analyzing device that uses hardware more efficiently than conventional analyzing devices, such as logic analyzers and emulators. It would be further advantageous to provide a device with more flexibility than conventional analyzing devices. It would be still further advantageous to provide a device with the functionality of both a logic analyzer and an in-circuit emulator.